iT邦幫忙

2021 iThome 鐵人賽

DAY 21
0
Software Development

PHP 語法通關系列 第 21

Day21 類別與物件--魔術方法construct and deconstruct

  • 分享至 

  • xImage
  •  

類是通過class關鍵字來定義的,是對某個物件的定義,包含有關物件名稱、方法、屬性和事件,不過實際上類本身並不是物件,因為類不存在於內存中。
如果想引用類的代碼運行,那需要創建類的一個新的實例(實例化),就等於在內存中創建了一個類,雖然只有一個類,但能從這個類在內存中創建多個相同類型的物件。

現在就直接開一個例子吧~~~
在這邊我寫了一個MysqlClass的類,寫法上一章有介紹過,這邊有屬性與方法,寫了註解讓大家更好的了解,並實例化這個類,把它變成可以訪問的!

<?php
class MysqlClass
{
	//成員屬性
	const DB_HOST = 'localhost';
	const DB_USER = 'root';
	const DB_PWD = 'abcd';
	const DB_NAME = 'Winnie';
	//成員方法
	function text_Const()
	{
		//類中訪問常量
		echo MysqlClass::DB_HOST;
		echo self::DB_NAME;
		echo self::DB_PWD;
	}
}
//在類的外部訪問
echo MysqlClass::DB_HOST;
echo MysqlClass::DB_USER;

//在類的內部訪問
$inv = new MysqlClass;
$inv ->text_Const();

物件的生成和使用方法

  • 一般情況下,類是無法直接使用的,需要將類實例化物件之後才可以使用。

  • 實例化物件的方法

    • 物件變量 = new 類名;
    • 物件變量 = new 類名();
  • 使用物件中的成員屬性

    • 物件變量->成員屬性名
  • 使用物件中的成員方法

    • 物件變量->成員方法名()
  • $this關鍵字

    • $this 表示當前的物件
    • 作用:在當前物件的成員方法中,調用當前物件中的成員屬性。
    • 類必須實例化才能使用$this

物件導向的魔術方法及特性

構造方法及析構方法
  • 魔術方法(Magic methods):
    是一種特殊的函數,PHP中把以兩個下劃線__開頭的方法稱為魔術方法。
    在命名自己的類方法時不能使用這些方法名,除非是想使用其魔術功能。
    1. 構造方法:
      • __construct()
      • 觸發時機:在物件實例化的時候自動觸發
      • 作用:初始化成員屬性
      • 參數:可有可沒有,取決於設定和邏輯
      • 返回值:沒有
      • 注意:如果構造方法具有參數,且參數沒有默認值,在實例化物件時,必須在類名後面的括號內添加
    2. 析構方法:
      • __destruct()
      • 觸發時機:在銷毀物件的時候自動觸發(unset() 或者 頁面執行完畢)
      • 作用:回收物件使用過程中的資源
      • 參數:沒有
      • 返回值:沒有
<?php
class HumanClass
{
    //成員屬性
    var $name;
    var $sex;
    var $id; //身份證號

    //成員方法
    //魔術方法--構造方法 :構建和創造
    function __construct($name)
    {
        echo '#####';
        $this->sex = mt_rand(0, 1) ? '男' : '女';
        $this->name = $name;
        $this->id = uniqid();
        //沒有返回值
        //return 'aaaa';
    }
    function sayHi()
    {
        echo 'Hello~~~';
    }
    function sing()
    {
        echo '一閃一閃亮晶晶~';
    }
    //析構方法  拆解構造
    function __destruct()
    {
        echo '@@@@@@@';
        unset($this->id);
    }
}

$one = new HumanClass('Winnie');
var_dump($one);
// unset($one);
echo '<hr>';
echo $one->id;
// unset($one);

Day21 Winnie的聊天室

今天介紹了兩個很主要的魔術方法,剩的明天繼續介紹~~


上一篇
Day20 類別與物件介紹
下一篇
Day22 類別與物件--魔術方法2 及 封裝private
系列文
PHP 語法通關30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言